package com.zcloud.eventstudydemo.llm;

/**
 * 文本分析API接口 - Java版本
 * 分析自然语言文本并返回结构化参数
 */
public class AnalyzeLLMApi {

    /**
     * 分析自然语言文本并返回结构化参数
     *
     * @param text 输入的自然语言文本
     * @return 包含以下字段的实体对象：
     * - relatedEntity: 相关实体，指输入问题的主体对象（如：XX巡洋舰、项目名称、产品型号等），支持多个实体，用逗号分隔
     * - timeStart: 事件开始时间，格式为 YYYY-MM-DD HH:MM
     * - timeEnd: 事件结束时间，格式为 YYYY-MM-DD HH:MM
     * - eventContent: 事件详情，包含完整的意图、行动、地点等信息
     * @throws IllegalArgumentException 当输入文本为空时
     * @throws RuntimeException         当无法连接到Ollama服务时
     */
    public static AnalysisResult analyzeTextApi(String text) {
        return analyzeTextApi(text, "http://192.168.1.110:11434", "qwen3:1.7b");
    }

    /**
     * 分析自然语言文本并返回结构化参数
     *
     * @param text      输入的自然语言文本
     * @param ollamaUrl Ollama服务地址
     * @return 分析结果
     * @throws IllegalArgumentException 当输入文本为空时
     * @throws RuntimeException         当无法连接到Ollama服务时
     */
    public static AnalysisResult analyzeTextApi(String text, String ollamaUrl) {
        return analyzeTextApi(text, ollamaUrl, "qwen3:1.7b");
    }

    /**
     * 分析自然语言文本并返回结构化参数
     *
     * @param text      输入的自然语言文本
     * @param ollamaUrl Ollama服务地址
     * @param modelName 使用的模型名称
     * @return 分析结果
     * @throws IllegalArgumentException 当输入文本为空时
     * @throws RuntimeException         当无法连接到Ollama服务时
     */
    public static AnalysisResult analyzeTextApi(String text, String ollamaUrl, String modelName) {
        if (text == null || text.trim().isEmpty()) {
            throw new IllegalArgumentException("输入文本不能为空");
        }

        // 创建分析器实例
        AnalyzerLLMResult analyzer = new AnalyzerLLMResult(ollamaUrl, modelName);

        // 测试连接
        if (!analyzer.testConnection()) {
            throw new RuntimeException("无法连接到Ollama服务，请检查服务是否运行");
        }

        // 分析文本
        return analyzer.analyzeIntent(text.trim());
    }

    /**
     * 主函数 - 用于测试
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        System.out.println("analyze_text_api - 独立的文本分析API");
        System.out.println("使用示例:");

        try {
            AnalysisResult result = analyzeTextApi("海军博览会的时间");
            System.out.println(result);
        } catch (Exception e) {
            System.err.println("测试失败: " + e.getMessage());
        }

        System.out.println("结束");
    }
}
